package com.dragoncombin.homework.Module03;

import java.util.Scanner;

public class Problem02 {

    // 提示用户输入两个字符串，输出两个字符串最大的子串
    public static void maxSubString() {
        Scanner in = new Scanner(System.in);
        // 1. 提示用户输入输入两个字符串
        System.out.println("===方法介绍：输入分别输入两个字符串，输出两个字符串的最大子串===");
        System.out.println("Input: ");
        System.out.print("请输入第一个字符串: ");
        String s1 = in.next();
        System.out.print("请输入第二个字符串: ");
        String s2 = in.next();

        System.out.println("Output: ");

        // 2. 找到 s1 和 s2 中长度较长的字符串和较短的字符串
        String longStr;
        String shortStr;

        if (s1.length() >= s2.length()) {
            longStr = s1;
            shortStr = s2;
        } else {
            longStr = s2;
            shortStr = s1;
        }

        // 3. 获取较短字符串的子串，然后到较长的子串中查找是否存在该子串
        // 获取子串的方法
        int len = shortStr.length();

        for (int i = len; i > 0; i--) {
            // 获取短字符串中所有可能的子串
            for (int beginIndex = 0; beginIndex <= len - i; beginIndex++) {
                int endIndex = beginIndex + i;
                String sub = shortStr.substring(beginIndex, endIndex);
                if (longStr.contains(sub)) {
                    System.out.println("两个指定字符串中最大相同子串为: " + sub);
                    return;
                }
            }
        }
    }

    public static void main(String[] args) {

        /*
            编程题：编程获取两个指定字符串中最大相同子串
         */
        // 1. 声明两个字符串，找到两个字符串中最大相同子串
        String s1 = "asdafghjka";
        String s2 = "aaasdfg";
        // 2. 找到 s1 和 s2 中长度较长的字符串和较短的字符串
        String longStr;
        String shortStr;

        if (s1.length() >= s2.length()) {
            longStr = s1;
            shortStr = s2;
        } else {
            longStr = s2;
            shortStr = s1;
        }

        // 3. 获取较短字符串的子串，然后到较长的子串中查找是否存在该子串
        // 获取子串的方法
        int len = shortStr.length();
        outer:
        for (int i = len; i > 0; i--) {
            // 获取短字符串中所有可能的子串
            for (int beginIndex = 0; beginIndex <= len - i; beginIndex++) {
                int endIndex = beginIndex + i;
                String sub = shortStr.substring(beginIndex, endIndex);
                if (longStr.contains(sub)) {
                    System.out.println("两个指定字符串中最大相同子串为: " + sub);
                    break outer;
                }
            }
        }

        System.out.println("--------------------------------------------");
        // 调用静态方法maxSubString 提示用户输入两字符串，输出结果
        maxSubString();
    }
}
